export function isFunction(func) {
    return (
        typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]'
    );
}

export function snapToGrid(grid, pendingX, pendingY, scale = 1) {
    const x = Math.round(pendingX / scale / grid[0]) * grid[0];
    const y = Math.round(pendingY / scale / grid[1]) * grid[1];

    return [x, y];
}

export function getSize(el) {
    const rect = el.getBoundingClientRect();

    return [parseInt(rect.width), parseInt(rect.height)];
}

export function computeWidth(parentWidth, left, right) {
    return parentWidth - left - right;
}

export function computeHeight(parentHeight, top, bottom) {
    return parentHeight - top - bottom;
}

export function restrictToBounds(value, min, max) {
    if (min !== null && value < min) {
        return min;
    }

    if (max !== null && max < value) {
        return max;
    }

    return value;
}
